欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

ArrayList的構造

ArrayList有三個構造方法:

1、無參構造

2、利用其它構建

3、指定順序表初始容量

無參構造的源碼分析

public ArrayList() {
? ? this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

上面是ArrayList()無參構造的源碼。那么elementData 和 DEFAULTCAPACITY_EMPTY_ELEMENTDATA是啥呢?我們接著找。

transient Object[] elementData; // non-private to simplify nested class access
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

看到上面兩行源碼,我們可以得出elementData是一個沒有指向數組的索引。DEFAULTCAPACITY_EMPTY_ELEMENTDATA是一個大小為0的數組

在無參構造中的:this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;這行代碼表示讓elementData 存儲大小為0的數組的索引。

public boolean add(E e) {
? ? ensureCapacityInternal(size + 1); ?// Increments modCount!!
? ? elementData[size++] = e;
? ? return true;
}

ensureCapacityInternal(size + 1);這個方法源碼的注釋是遞增模數!!。其實就和我們在順序表中判斷其是否滿了然后擴容這個操作是十分相似 的。我們接下來看一下他的源碼:

private void ensureCapacityInternal(int minCapacity) {
? ? ensureExplicitCapacity(calculateCapacity(elementData, minCapacity));
}

?

如果想要了解ensureCapacityInternal就必須要了解ensureExplicitCapacity和calculateCapacity的源碼

查看calculateCapacity源碼 (中文注釋為我的解釋):

private static int calculateCapacity(Object[] elementData, int minCapacity) {
? ? //DEFAULTCAPACITY_EMPTY_ELEMENTDATA是ArrayList進行無參初始化的時候
? ? //給其賦值的一個大小為0的數組。沒有發生什么特殊的變化則是可以進入這個判斷
? ? if (elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
? ? ? ? //private static final int DEFAULT_CAPACITY = 10;
? ? ? ? //上一行是DEFAULT_CAPACITY的源碼,
? ? ? ? //下面一行代碼是DEFAULT_CAPACITY,和minCapacity哪個值最大所比較
? ? ? ? return Math.max(DEFAULT_CAPACITY, minCapacity);//返回的是:10和1比較最大的10
? ? }
? ? return minCapacity;
? ? //若是傳入的大小大于10的話返回的就是傳入的minCapacity數值
}

查看ensureExplicitCapacity(calculateCapacity源碼(中文注釋為我的解釋):

private void ensureExplicitCapacity(int minCapacity) {//minCapacity是10
? ? modCount++;
? ??
? ? // overflow-conscious code
? ? if (minCapacity - elementData.length > 0)
? ? ? ? //minCapacity的大小為10,elementData.length的大小為0 這個判斷語句可以進入
? ? ? ? grow(minCapacity);
}

?

查看grow源碼(中文注釋為我的解釋):

private void grow(int minCapacity) {//minCapacity 為 10?
? ? // overflow-conscious code
? ? int oldCapacity = elementData.length;//oldCapacity 大小為 0
? ? //newCapacity 大小oldCapacity的1.5倍為 0
? ? int newCapacity = oldCapacity + (oldCapacity >> 1);
? ? //newCapacity - minCapacity的值為 -10 這個判斷能夠給進入
? ? if (newCapacity - minCapacity < 0)
? ? ? ? newCapacity = minCapacity;//newCapacity 為 10
? ? //這個判斷語句進不去,MAX_ARRAY_SIZE是一個很大的值newCapacity - MAX_ARRAY_SIZE < 0
? ? //這個判斷的作用在下面詳解add源碼的時候再解釋
? ? if (newCapacity - MAX_ARRAY_SIZE > 0)
? ? ? ? newCapacity = hugeCapacity(minCapacity);
? ? // minCapacity is usually close to size, so this is a win:
? ? //newCapacity的值為10,elementData擴容大小為10
? ? elementData = Arrays.copyOf(elementData, newCapacity);
}

?

?

?

文章鏈接: http://www.qzkangyuan.com/22435.html

文章標題:ArrayList的構造

文章版權:夢飛科技所發布的內容,部分為原創文章,轉載請注明來源,網絡轉載文章如有侵權請聯系我們!

聲明:本站所有文章,如無特殊說明或標注,均為本站原創發布。任何個人或組織,在未征得本站同意時,禁止復制、盜用、采集、發布本站內容到任何網站、書籍等各類媒體平臺。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。

給TA打賞
共{{data.count}}人
人已打賞
建站教程

查看數組的大小

2023-7-25 13:27:13

建站教程

其他構造的源碼分析

2023-7-26 14:30:42

0 條回復 A文章作者 M管理員
    暫無討論,說說你的看法吧
?
個人中心
購物車
優惠劵
今日簽到
有新私信 私信列表
搜索
主站蜘蛛池模板: 西藏| 桃园县| 阳原县| 光山县| 青铜峡市| 贞丰县| 清河县| 卢湾区| 靖西县| 益阳市| 治县。| 阳新县| 扬中市| 康平县| 耿马| 桑植县| 武乡县| 咸阳市| 镇赉县| 邻水| 房产| 扶沟县| 昆明市| 兴城市| 台山市| 元氏县| 竹山县| 浦北县| 浪卡子县| 萍乡市| 长泰县| 古浪县| 吉林市| 江源县| 西贡区| 隆德县| 吴旗县| 桂东县| 福州市| 交城县| 新和县|